using LiJ.Common.Extention;
using System.Collections.Generic;

namespace LiJ.Pay.WeiXin.Pay.Mos
{
	/// <summary>
	///  支付订单交易响应实体
	/// </summary>
	public class WxPayOrderTradeResp : WxPayBaseResp
	{
		/// <summary>   
		///    设备号 可空 String(32) 微信支付分配的终端设备号，
		/// </summary>  
		public string device_info
		{
			get;
			set;
		}

		/// <summary>   
		///    用户标识 必填 String(128) 用户在商户appid下的唯一标识
		/// </summary>  
		public string openid
		{
			get;
			set;
		}

		/// <summary>   
		///    是否关注公众账号 可空 String(1) 用户是否关注公众账号，Y-关注，N-未关注，仅在公众账号类型支付有效
		/// </summary>  
		public string is_subscribe
		{
			get;
			set;
		}

		/// <summary>   
		///    交易类型 必填 String(16) 调用接口提交的交易类型，取值如下：JSAPI，NATIVE，APP，MICROPAY，详细说明见参数规定
		/// </summary>  
		public string trade_type
		{
			get;
			set;
		}

		/// <summary>   
		///    付款银行 必填 String(16) 银行类型，采用字符串类型的银行标识
		/// </summary>  
		public string bank_type
		{
			get;
			set;
		}

		/// <summary>   
		///    标价金额 必填 Int 订单总金额，单位为分
		/// </summary>  
		public int total_fee
		{
			get;
			set;
		}

		/// <summary>   
		///    应结订单金额 可空 Int 应结订单金额=订单金额-非充值代金券金额，应结订单金额小于等于订单金额。
		/// </summary>  
		public int settlement_total_fee
		{
			get;
			set;
		}

		/// <summary>   
		///    标价币种 可空 String(8) 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
		/// </summary>  
		public string fee_type
		{
			get;
			set;
		} = "CNY";


		/// <summary>   
		///    现金支付金额 必填 Int 现金支付金额订单现金支付金额，详见支付金额
		/// </summary>  
		public int cash_fee
		{
			get;
			set;
		}

		/// <summary>   
		///    现金支付币种 可空 String(16) 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
		/// </summary>  
		public string cash_fee_type
		{
			get;
			set;
		}

		/// <summary>   
		///    代金券金额 可空 Int “代金券”金额小于订单金额，订单金额-“代金券”金额=现金支付金额，详见支付金额
		/// </summary>  
		public int coupon_fee
		{
			get;
			set;
		}

		/// <summary>   
		///    代金券使用数量 可空 Int 代金券使用数量
		/// </summary>  
		public int coupon_count
		{
			get;
			set;
		}

		/// <summary>   
		///    微信支付订单号 必填 String(32) 微信支付订单号
		/// </summary>  
		public string transaction_id
		{
			get;
			set;
		}

		/// <summary>   
		///    商户订单号 必填 String(32) 商户系统的订单号，与请求一致。
		/// </summary>  
		public string out_trade_no
		{
			get;
			set;
		}

		/// <summary>   
		///    附加数据 可空 String(128) 附加数据，原样返回
		/// </summary>  
		public string attach
		{
			get;
			set;
		}

		/// <summary>   
		///    支付完成时间 必填 String(14) 订单支付时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
		/// </summary>  
		public string time_end
		{
			get;
			set;
		}

		/// <summary>
		///  订单中使用的优惠券列表
		/// </summary>
		public List<WxPayOrderCouponMo> coupons
		{
			get;
			set;
		}

		/// <summary>
		/// 格式化自身属性部分
		/// </summary>
		protected override void FormatPropertiesFromMsg()
		{
			this.device_info = base["device_info"];
			this.openid = base["openid"];
			this.is_subscribe = base["is_subscribe"];
			this.trade_type = base["trade_type"];
			this.bank_type = base["bank_type"];
			this.total_fee = base["total_fee"].ToInt32(0);
			this.settlement_total_fee = base["settlement_total_fee"].ToInt32(0);
			this.fee_type = base["fee_type"];
			this.cash_fee = base["cash_fee"].ToInt32(0);
			this.cash_fee_type = base["cash_fee_type"];
			this.coupon_fee = base["coupon_fee"].ToInt32(0);
			this.coupon_count = base["coupon_count"].ToInt32(0);
			this.transaction_id = base["transaction_id"];
			this.out_trade_no = base["out_trade_no"];
			this.attach = base["attach"];
			this.time_end = base["time_end"];
			if (this.coupon_count > 0)
			{
				this.coupons = new List<WxPayOrderCouponMo>(this.coupon_count);
				for (int i = 0; i < this.coupon_count; i++)
				{
					WxPayOrderCouponMo obj = new WxPayOrderCouponMo
					{
						coupon_fee = base["coupon_fee_" + i].ToInt32(0),
						coupon_id = base["coupon_id_" + i],
						coupon_type = base["coupon_type_" + i]
					};
				}
			}
		}
	}
}
